<?php
/**
 * 类名 App
 * 创建者: TonicGB
 * 说明:精简模式应用程序类
 */


class App {

    /**
     * 功能:程序的初始化
     */
    static public function run() {
        // 取得模块和操作名称
        define('MODULE_NAME',   App::getModule());       // Module名称
        define('ACTION_NAME',   App::getAction());        // Action操作

        // 记录应用初始化时间
        if(C('SHOW_RUN_TIME'))  $GLOBALS['_initTime'] = microtime(TRUE);

        // 执行操作
        R(MODULE_NAME.'/'.ACTION_NAME);
        // 保存日志记录
        if(C('LOG_RECORD')) Log::save();
        return ;
    }

    /**
     * 功能：获取url中传递模块的名称
     * @return array|mixed|null|string|void
     */
    static private function getModule() {
        $var  =  C('VAR_MODULE'); //系统默认模块变量的名称 例如?m=xx
        //post获取变量模块内容，如果post获取不到使用get来获取,得不到就使用默认模块名称
        $module = !empty($_POST[$var]) ?
            $_POST[$var] :
            (!empty($_GET[$var])? $_GET[$var]:C('DEFAULT_MODULE'));  //没有定义模块使用默认模块名称

        //为true 表示 URL地址不区分大小写
        if(C('URL_CASE_INSENSITIVE')) {
            //不区分大小写，把获取的模块名转换成小写处理
            define('P_MODULE_NAME',strtolower($module));
            // 智能识别方式 index.php/user_type/index/ 使用驼峰命名法，我们可以把user_type识别到 UserTypeAction 模块
            $module = ucfirst(parse_name(strtolower($module),1));
        }
        unset($_POST[$var],$_GET[$var]);//清除请求中模块变量的内容
        return $module;  //返回模块名
    }

    /**
     * 功能：获得url中传递的action操作名称
     * 说明：普通模式?操作变量=操作名
     * @return array|mixed|null|void
     */
    static private function getAction() {
        $var  =  C('VAR_ACTION');      //获取操作名变量名
        //通过post来获取变量的操作名，post获取不到使用get,否则就使用默认操作名
        $action   = !empty($_POST[$var]) ?
            $_POST[$var] :
            (!empty($_GET[$var])?$_GET[$var]:C('DEFAULT_ACTION'));  //未设置操作名 使用默认操作名
        //清除请求变量中的内容
        unset($_POST[$var],$_GET[$var]);
        return $action;
    }

};